﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;

namespace PageAdmin.Utils.ORM
{

    /// <summary>
    /// 数据表列信息描述类
    /// </summary>
    public class TableColumnInfo
    {
        /// <summary>
        /// 无参构造函数，需要实例化后定义各属性。
        /// </summary>
        public TableColumnInfo()
        {

        }

        /// <summary>
        /// 采用参数实例化对象
        /// </summary>
        /// <param name="name">字段名称</param>
        /// <param name="dataType">字段值类型</param>
        /// <param name="length">int,bigint,smllint,tiyint，datetime不需要设置length，</param>
        /// <param name="defaultValue">默认值，如果不设置请设置为null</param>
        /// <param name="canNullValue">是否运行控制，设置为null的话则默认true</param>
        /// <param name="decimalAccuracy">小数精度，默认为12,2</param>
        public TableColumnInfo(string name, ColumnDataType dataType = 0, int length = 0, object defaultValue = null, bool canNullValue = true, string decimalAccuracy = null)
        {
            Name = name;
            DataType = dataType;
            DefaultValue = defaultValue;
            Length = length;
            DecimalAccuracy = decimalAccuracy;
            CanNullValue = canNullValue;
        }

        ///// <summary>
        ///// 名称，类型,长度参数,其他属性可实例化后再设置。
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType,int length)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = null;
        //    Length =length;
        //    DecimalDigits = null;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型,长度参数,其他属性可实例化后再设置。
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="decimalDigits"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType, int length,int decimalDigits)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = null;
        //    Length = length;
        //    DecimalDigits = decimalDigits;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型，默认值参数,可用于int，bigint,smallint,tiyint,datetime类型字段的实例化
        ///// </summary>
        ///// <param name="name">字段名称</param>
        ///// <param name="dataType">值类型</param>
        ///// <param name="defaultValue">默认值</param>
        //public TableColumnInfo(string name, ColumnDataType dataType, object defaultValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = null;
        //    DecimalDigits = null;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型，默认值，是否可为null参数,可用于int，bigint,smallint,tiyint,datetime类型字段实例化
        ///// </summary>
        ///// <param name="name">字段名</param>
        ///// <param name="dataType">值类型</param>
        ///// <param name="defaultValue">默认值</param>
        ///// <param name="canNullValue">是否可为null</param>
        //public TableColumnInfo(string name, ColumnDataType dataType, object defaultValue,bool canNullValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = null;
        //    DecimalDigits = null;
        //    CanNullValue = canNullValue;
        //}

        ///// <summary>
        ///// 名称，类型，长度，和精度参数,可用于decaimal类型字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="decimalDigits"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType, int length,int decimalDigits)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue =null;
        //    Length = length;
        //    DecimalDigits = decimalDigits;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型，长度，精度,默认值参数,可用于decaimal类型字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="decimalDigits"></param>
        ///// <param name="defaultValue"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType, int length, int decimalDigits, decimal defaultValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = length;
        //    DecimalDigits = decimalDigits;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型，长度，精度,默认值参数,可用于decaimal类型字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="decimalDigits"></param>
        ///// <param name="defaultValue"></param>
        ///// <param name="canNullValue"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType, int length, int decimalDigits, decimal defaultValue, bool canNullValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = length;
        //    DecimalDigits = decimalDigits;
        //    CanNullValue = canNullValue;
        //}

        ///// <summary>
        ///// 名称，类型，长度参数，可用于nvarcvhar/varchar/char/nchar类型字段字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType,int length)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = null;
        //    Length = length;
        //    DecimalDigits = null;
        //    CanNullValue =null;
        //}


        ///// <summary>
        ///// 名称，类型，长度，默认值，是否null参数，可用于nvarcvhar/varchar/char/nchar类型字段字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="defaultValue"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType, int length,string defaultValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = length;
        //    DecimalDigits = null;
        //    CanNullValue = null;
        //}

        ///// <summary>
        ///// 名称，类型，长度，默认值，是否null参数，可用于nvarcvhar/varchar/char/nchar类型字段字段的实例化
        ///// </summary>
        ///// <param name="name"></param>
        ///// <param name="dataType"></param>
        ///// <param name="length"></param>
        ///// <param name="defaultValue"></param>
        ///// <param name="canNullValue"></param>
        //public TableColumnInfo(string name, ColumnDataType dataType,int length, string defaultValue,bool canNullValue)
        //{
        //    Name = name;
        //    DataType = dataType;
        //    DefaultValue = defaultValue;
        //    Length = length;
        //    DecimalDigits = null;
        //    CanNullValue = canNullValue;
        //}

        /// <summary>
        /// 字段（列）名称
        /// </summary>
        public string Name { get; set; }


        /// <summary>
        /// 字段（列）的数据类型
        /// </summary>
        public ColumnDataType DataType { get; set; } = 0;

        /// <summary>
        /// 字段（列）长度，主要针对字符串,其他类型不需要设置
        /// </summary>
        public int Length { get; set; }

        /// <summary>
        /// 小数精度，格式为：12,2;
        /// </summary>
        public string DecimalAccuracy { get; set; }

        /// <summary>
        /// 字段（列）默认值
        /// </summary>
        public object DefaultValue { get; set; }

        /// <summary>
        /// 是否允许空值，默认true
        /// </summary>
        public bool CanNullValue { get; set; } = true;

    }


}